home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Aminet 4
/
Aminet 4 - November 1994.iso
/
aminet
/
util
/
moni
/
ramspeed.lha
/
ramspeed.c
< prev
next >
Wrap
C/C++ Source or Header
|
1993-10-15
|
4KB
|
190 lines
/*
** $VER: ramspeed Release (15.12.93)
**
** Ram Test , tests bulk memeory copies using cpu with display dma acting
** as a test of slow down
**
** Programmed by : Raul A. Sobon.
**
** (C) Copyright 1993 \.../ TM, Inc.
** All Rights Reserved
*/
#include <exec/types.h>
#include <exec/memory.h>
#include <exec/execbase.h>
#include <dos/dos.h>
#include <dos/dosextens.h>
#include <dos/stdio.h> // dos stdio
#include <graphics/gfxbase.h>
#include <exec/memory.h>
#include <intuition/classes.h>
#include <intuition/gadgetclass.h>
#include <intuition/intuitionbase.h>
#include <proto/exec.h> // use amiga library stuff
#include <proto/dos.h>
#include <proto/graphics.h>
#include <proto/intuition.h>
#include <stdio.h> // and the thing we all use!
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <dos.h>
extern void bulkcopy( APTR source, APTR dest, LONG size);
APTR MainVisualInfo;
struct Screen *MainScreen;
#include "ramspeed_rev.h"
static UBYTE verstr[]={ VERSTAG };
/*
* --- Open lots of libraries that I need.
*/
long OpenLibraries( void ){
if ( !(GfxBase = (struct GfxBase *) OpenLibrary((UBYTE *) "graphics.library" , 33l ))) {
WriteStr("\graphics.library\n");
return FALSE;
}
if ( !(DOSBase = (struct DosLibrary *) OpenLibrary((UBYTE *) "dos.library", 33l ))) {
WriteStr("\tdos.library\n");
return FALSE;
}
if ( !(IntuitionBase = (struct IntuitionBase *) OpenLibrary((UBYTE *) "intuition.library", 33l ))) {
WriteStr("\tintuition.library\n");
return FALSE;
}
return TRUE;
}
/*
* --- Close the libraries which are opened by me.
*/
void CloseLibraries( void ){
if (IntuitionBase) CloseLibrary( (struct Library *) IntuitionBase );
if (DOSBase) CloseLibrary( (struct Library *) DOSBase );
if (GfxBase) CloseLibrary( (struct Library *) GfxBase );
}
void ShowArgs( void ){
puts("RamSpeed (c) Raul A. Sobon, Dec-1993");
puts("options are :");
puts(" CHIP2FAST ... copy chip ram to fast ram");
puts(" FAST2FAST ... copy fast ram to fast ram");
puts(" CHIP2CHIP ... copy chip ram to chip ram");
puts(" FAST2CHIP ... copy fast ram to chip ram");
}
#define MOVESIZE 10000000
#define BLOCKSIZE 0xf000
APTR source;
APTR dest;
ULONG GetSysTime( void ){
unsigned int t1[2]={0,0};
timer( t1 );
// printf("t1=%ld t2=%ld\n",t1[0],t1[1]);
return ( (1000*t1[0])+(t1[1]/1000) );
}
void TestRam( void ){
ULONG time1,time2,time3,blksize,bpms,nsb,lp;
printf("Moving %ld BYTES ...\n", MOVESIZE );
blksize = (BLOCKSIZE>>2)-1;
time1=GetSysTime();
Forbid();
for(lp=0;lp<(MOVESIZE/BLOCKSIZE);lp++){
bulkcopy( source, dest, blksize );
}
Permit();
time2 = GetSysTime();
time3 = time2-time1;
if( time3 == 0 ) {printf("error\n"); return; };
bpms = MOVESIZE/time3;
nsb = 1000000/bpms;
puts("done.");
printf("It took %ld ms to move %ld bytes of data\n",time3,MOVESIZE);
printf("Which is %ld bytes/sec\n", bpms*1000 );
printf("Which is %ld ns/byte\n", nsb );
printf("Which is %ld color clock cycles/byte\n", (nsb/280)+1 );
printf("Which is %ld 12Mhz 68020 cycles/byte\n", (nsb/83)+1 );
printf("Which is %ld 25Mhz 68040 cycles/byte\n", (nsb/42)+1 );
}
// ----------------------------------------------------------------------------------------------
int main( int argc,char *argv[] ) {
BOOL running = TRUE;
APTR fastram,chipram;
OpenLibraries();
fastram = AllocVec( BLOCKSIZE, MEMF_PUBLIC );
chipram = AllocVec( BLOCKSIZE, MEMF_CHIP );
if( argc < 2 )
ShowArgs();
else
if( !strncmp( "CHIP2FAST",argv[1],9) || !strncmp( "chip2fast",argv[1],9) ) {
source = chipram; dest = fastram; TestRam(); }
else
if( !strncmp( "FAST2FAST",argv[1],9) || !strncmp( "fast2fast",argv[1],9) ) {
source = fastram; dest = fastram; TestRam(); }
else
if( !strncmp( "CHIP2CHIP",argv[1],9) || !strncmp( "chip2chip",argv[1],9) ) {
source = chipram; dest = chipram; TestRam(); }
else
if( !strncmp( "FAST2CHIP",argv[1],9) || !strncmp( "fast2chip",argv[1],9) ) {
source = fastram; dest = chipram; TestRam(); }
else
ShowArgs();
FreeVec( fastram );
FreeVec( chipram );
CloseLibraries();
Exit( TRUE );
}